/**
 *  @file levelInfo.h
 *
 *  @date 3-dec-2009
 *  @author Ives van der Flaas
 */

#ifndef LEVELINFO_H_
#define LEVELINFO_H_

#include <vector>
#include <queue>
#include <string>
#include <tr1/memory>
#include "enemyShip.h"
namespace si
{
/**
 * Represents a row of ships. All ships are the same type.
 */
class ShipRow
{
public:
	int nrOfShips;
	std::string type;
};

/**
 * Abstract part of a level.
 */
class LevelPart
{
	virtual void IHATECPLUSPLUS(){}
};

/**
 * A wave. This consists of one or more shiprows.
 */
class WavePart: public LevelPart
{
public:
	std::vector<ShipRow> rows;
};
/**
 * Delay is when no new ships are placed on screen. Delay is in seconds.
 */
class DelayPart: public LevelPart
{
public:
	int delay;
};

/**
 * A level is made up out of levelparts.
 */
class Level
{
public:
	std::queue<std::tr1::shared_ptr<LevelPart> >parts;
	std::string name;
};

/**
 * Levelinfo has info on all levels in the game.
 */
class LevelInfo
{
public:
	std::queue<Level> levels;
};

}

#endif /* LEVELINFO_H_ */
